﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class TruyXuatDB
    {
        /// <summary>
        /// Các hàm truy vấn đến cơ sở dử liệu
        /// </summary>
        public SqlConnection Con = new SqlConnection();
        string ketnoi = ConfigurationManager.ConnectionStrings["tenchuoiketnoi"].ConnectionString;

        public static int TrangthaiKetnoi = 1;
        public int TrangThaiKetNoi_
        {
            get
            {
                return TrangthaiKetnoi;
            }
            set
            {
                TrangthaiKetnoi = value;
            }
        }
        /// <summary>
        /// Hàm tạo đối tượng kết nối
        /// </summary>
        public TruyXuatDB()
        {
            try
            {
                Con.ConnectionString = ketnoi;
                if (Con.State != ConnectionState.Open)
                    Con.Open();
            }
            catch (Exception)
            {
                TrangthaiKetnoi = 0;
            }
        }

        /// <summary>
        /// gọi thằng này ở from main chổ load
        /// </summary>
        /// <param name="DBPath"></param>
        /// <returns></returns>
        public bool AttachDB(string DBPath)
        {
            if (TrangthaiKetnoi == 1) return false;
            //string DBPath = Application.StartupPath + "\\Picture.mdf";

            SqlConnection Con = new SqlConnection ();
            Con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";// cho thằng này vô xlm
            Con.Open ();
            SqlCommand Cmd = new SqlCommand ("EXEC sp_Attach_db @DB='ten_DB_muon_dat', @filename1='" + DBPath + "'", Con);
            Cmd.ExecuteNonQuery ();
            Cmd.Dispose ();
            Con.Close ();
            return true;
        }

        /// <summary>
        /// Lấy hết dữ liệu của 1 bảng
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public DataTable LayDuLieu(string SQL)
        {
            SqlCommand Com = new SqlCommand(SQL, Con);
            SqlDataAdapter DA = new SqlDataAdapter(Com);
            DataTable DT = new DataTable();
            DA.Fill(DT);
            return DT;
        }

        /// <summary>
        /// Lấy thùng nước
        /// </summary>
        /// <param name="_SQL"></param>
        /// <returns></returns>
        public SqlDataAdapter LayDuLieuTho(string SQL)
        {
            SqlCommand Com = new SqlCommand(SQL, Con);
            SqlDataAdapter DA = new SqlDataAdapter(Com);
            return DA;
        }

        /// <summary>
        /// Câu select có điều kiện
        /// </summary>
        /// <param name="sql">Câu truy vấn</param>
        /// <param name="name">Mãng chứa các tên biến</param>
        /// <param name="values">mãng chứa giá trị của các biến</param>
        /// <param name="Nparameter">số lượng biến</param>
        /// <returns>Kết quả trả về một bảng kiểu datatable</returns>
        public DataTable LayDuLieu(string SQL, string[] Name, object[] Values, int Nparameter)
        {
            SqlCommand com = new SqlCommand(SQL, Con);
            for (int i = 0; i < Nparameter; i++)
            {
                com.Parameters.AddWithValue(Name[i], Values[i]);
            }
            SqlDataAdapter DA = new SqlDataAdapter(com);
            DataTable DT = new DataTable();
            DA.Fill(DT);
            return DT;
        }

        /// <summary>
        /// Câu truy vấn thêm 1 mẩu tin, xóa hết bảng
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public int Update(string SQL)
        {
            SqlCommand Com = new SqlCommand(SQL, Con);
            return Com.ExecuteNonQuery();
        }

        /// <summary>
        /// Câu xóa, cập nhật có điều kiện
        /// </summary>
        /// <param name="sql">Câu truy vấn</param>
        /// <param name="name">Mãng chứa các tên biến</param>
        /// <param name="values">mãng chứa giá trị của các biến</param>
        /// <param name="Nparameter">số lượng biến</param>
        /// <returns>Kết quả trả về là 1 nếu thực hiện thành công, trả về 0 nếu thất bại</returns>
        public int Update(string SQL, string[] Name, object[] Values, int Nparameter)
        {
            SqlCommand Com = new SqlCommand(SQL, Con);
            for (int i = 0; i < Nparameter; i++)
            {
                Com.Parameters.AddWithValue(Name[i], Values[i]);
            }
            return Com.ExecuteNonQuery();
        }

        /// <summary>
        /// Cập nhật hình chính
        /// </summary>
        /// <param name="SPMa"></param>
        /// <param name="ha"></param>
        /// <returns></returns>
        public int Update(string SPMa, byte[] ha)
        {
            string querry = "update SanPham set SPhinhAnh = @pic where SPma = @spma";
            
            SqlParameter picparemeter = new SqlParameter();
            picparemeter.SqlDbType = SqlDbType.Image;
            picparemeter.ParameterName = "@pic";
            picparemeter.Value = ha;

            SqlParameter spma = new SqlParameter();
            spma.SqlDbType = SqlDbType.Char;
            spma.ParameterName = "@spma";
            spma.Value = SPMa;

            SqlCommand cmd = new SqlCommand(querry, Con);
            cmd.Parameters.Add(picparemeter);
            cmd.Parameters.Add(spma);
            return cmd.ExecuteNonQuery();
        }

        /// <summary>
        /// Cập nhật hình pụ
        /// </summary>
        /// <param name="ha"></param>
        /// <param name="SPMa"></param>
        /// <returns></returns>
        public int Update(byte[] ha, string SPMa)
        {
            string querry = "update subpicture set hinh = @pic where id = @id";

            SqlParameter picparemeter = new SqlParameter();
            picparemeter.SqlDbType = SqlDbType.Image;
            picparemeter.ParameterName = "@pic";
            picparemeter.Value = ha;

            SqlParameter spma = new SqlParameter();
            spma.SqlDbType = SqlDbType.Char;
            spma.ParameterName = "@id";
            spma.Value = SPMa;

            SqlCommand cmd = new SqlCommand(querry, Con);
            cmd.Parameters.Add(picparemeter);
            cmd.Parameters.Add(spma);
            return cmd.ExecuteNonQuery();
        }
    }
}
